package grpc

import (
	"errors"
	"fmt"
	"io"
	"time"

	"gitee.com/xgotool/sqlite-logs-more/protoc"
	"gitee.com/xgotool/sqlite-logs-more/service/rootdb"
)

// 双向流监听
func (c *GrpcRemote) QuerySqlListen(stream protoc.Remote_QuerySqlListenServer) error {
	if c.Dervice == nil {
		return notFond(errors.New("设备未找到"))
	}
	c.HartTime = time.Now().Unix()
	// 设置设备详情
	for {
		// 给客户端发送消息时在此进行判断发送
		// 接收消息
		msg, err := stream.Recv()
		if err != nil {
			if err == io.EOF {
				// 如果错误为读取完成的错误，就跳过本次查询
				continue
			}
			return err
		}
		switch msg.Types {
		case 0:
			// 心跳维持
			if time.Now().Unix() > c.HartTime+5 {
				// 每隔5秒入库一次心跳数据
				c.Dervice.LastHart = time.Now().Unix()
				fmt.Println("心跳维持：/")
				err := rootdb.DerviceSet(c.Dervice)
				if err != nil {
					return sysErr(err)
				}
				c.HartTime = time.Now().Unix()
			}
			err = stream.Send(&protoc.FileRequest{})
			if err != nil {
				return err
			}
		case 1:
			// 文件上传操作【客户端请求时携带此值】
			// 下载时请在心跳时往客户端发送type=1的数据流
		case 2:
			// SQL执行请求，content为需要查询的搜索条件【json格式】
		case 3:
			// SQL执行结果返回值，file_name为执行的SQL，content为查询的结果【json格式】
		}
		time.Sleep(time.Millisecond * 100) // 休眠100毫秒
	}
}
